From 0bb249746fb564c81a7a94df2822c9e68b2bbd06 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Tue, 9 Feb 1999 20:50:47 +0000 Subject: [PATCH] Added a style_set() function so that word lengths get recomputed on style Tue Feb 9 15:35:13 1999 Owen Taylor * gtk/gtklabel.c (gtk_label_style_set): Added a style_set() function so that word lengths get recomputed on style change. --- ChangeLog | 6 +++++ ChangeLog.pre-2-0 | 6 +++++ ChangeLog.pre-2-10 | 6 +++++ ChangeLog.pre-2-2 | 6 +++++ ChangeLog.pre-2-4 | 6 +++++ ChangeLog.pre-2-6 | 6 +++++ ChangeLog.pre-2-8 | 6 +++++ gtk/gtklabel.c | 55 ++++++++++++++++++++++++++++++++++++---------- 8 files changed, 86 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 775ea8309c..7ef146b595 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 775ea8309c..7ef146b595 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Tue Feb 9 15:35:13 1999 Owen Taylor + + * gtk/gtklabel.c (gtk_label_style_set): Added + a style_set() function so that word lengths get + recomputed on style change. + Mon Feb 8 21:00:20 1999 Lars Hamann * gtk/gtkclist.c (CLIST_OPTIMUM_SIZE): changed to 64 diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index d241657495..62bc3e99c3 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -68,6 +68,8 @@ static void gtk_label_get_arg (GtkObject *object, static void gtk_label_finalize (GtkObject *object); static void gtk_label_size_request (GtkWidget *widget, GtkRequisition *requisition); +static void gtk_label_style_set (GtkWidget *widget, + GtkStyle *previous_style); static gint gtk_label_expose (GtkWidget *widget, GdkEventExpose *event); @@ -133,6 +135,7 @@ gtk_label_class_init (GtkLabelClass *class) object_class->finalize = gtk_label_finalize; widget_class->size_request = gtk_label_size_request; + widget_class->style_set = gtk_label_style_set; widget_class->expose_event = gtk_label_expose; } @@ -261,9 +264,13 @@ gtk_label_set_text (GtkLabel *label, len = strlen (str); str_wc = g_new (GdkWChar, len + 1); wc_len = gdk_mbstowcs (str_wc, str, len + 1); - str_wc[wc_len] = '\0'; - - gtk_label_set_text_internal (label, g_strdup (str), str_wc); + if (wc_len >= 0) + { + str_wc[wc_len] = '\0'; + gtk_label_set_text_internal (label, g_strdup (str), str_wc); + } + else + g_free (str_wc); } } @@ -873,6 +880,24 @@ gtk_label_size_request (GtkWidget *widget, *requisition = widget->requisition; } +static void +gtk_label_style_set (GtkWidget *widget, + GtkStyle *previous_style) +{ + GtkLabel *label; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_LABEL (widget)); + + label = GTK_LABEL (widget); + + if (previous_style && label->words) + /* Clear the list of words so that they are recomputed on + * size_request + */ + gtk_label_free_words (label); +} + static void gtk_label_paint_word (GtkLabel *label, gint x, @@ -885,20 +910,21 @@ gtk_label_paint_word (GtkLabel *label, gchar *tmp_str; tmp_str = gdk_wcstombs (word->beginning); - gtk_paint_string (widget->style, widget->window, widget->state, - area, widget, "label", - x + word->x, - y + word->y, - tmp_str); - g_free (tmp_str); + if (tmp_str) + { + gtk_paint_string (widget->style, widget->window, widget->state, + area, widget, "label", + x + word->x, + y + word->y, + tmp_str); + g_free (tmp_str); + } for (uline = word->uline; uline; uline = uline->next) gtk_paint_hline (widget->style, widget->window, widget->state, area, widget, "label", x + uline->x1, x + uline->x2, y + uline->y); - - } static gint @@ -969,6 +995,12 @@ gtk_label_parse_uline (GtkLabel *label, length = strlen (string); string_wc = g_new (GdkWChar, length + 1); wc_length = gdk_mbstowcs (string_wc, string, length + 1); + if (wc_length < 0) + { + g_free (string_wc); + return GDK_VoidSymbol; + } + string_wc[wc_length] = '\0'; pattern = g_new (gchar, length+1); @@ -1016,3 +1048,4 @@ gtk_label_parse_uline (GtkLabel *label, return accel_key; } + -- 2.30.2